this.actor._delegate = this;
this._children = [];
+ this._dot = null;
this._columnWidths = null;
this._spacing = 0;
this.active = false;
}
},
+ setShowDot: function(show) {
+ if (show) {
+ if (this._dot)
+ return;
+
+ this._dot = new St.DrawingArea({ style_class: 'popup-menu-item-dot' });
+ this._dot.connect('repaint', Lang.bind(this, this._onRepaintDot));
+ this.actor.add_actor(this._dot);
+ } else {
+ if (!this._dot)
+ return;
+
+ this._dot.destroy();
+ this._dot = null;
+ }
+ },
+
+ _onRepaintDot: function(area) {
+ let cr = area.get_context();
+ let [width, height] = area.get_surface_size();
+ let color = new Clutter.Color();
+ area.get_theme_node().get_foreground_color(color);
+
+ cr.setSourceRGBA (
+ color.red / 255,
+ color.green / 255,
+ color.blue / 255,
+ color.alpha / 255);
+ cr.arc(width / 2, height / 2, width / 3, 0, 2 * Math.PI);
+ cr.fill();
+ },
+
getColumnWidths: function() {
let widths = [];
for (let i = 0, col = 0; i < this._children.length; i++) {
},
_allocate: function(actor, box, flags) {
- let x = box.x1, height = box.y2 - box.y1;
+ let height = box.y2 - box.y1;
+
+ if (this._dot) {
+ let dotBox = new Clutter.ActorBox();
+ let dotWidth = Math.round(box.x1 / 2);
+
+ dotBox.x1 = Math.round(box.x1 / 4);
+ dotBox.x2 = dotBox.x1 + dotWidth;
+ dotBox.y1 = Math.round(box.y1 + (height - dotWidth) / 2);
+ dotBox.y2 = dotBox.y1 + dotWidth;
+ this._dot.allocate(dotBox, flags);
+ }
+
+ let x = box.x1;
for (let i = 0, col = 0; i < this._children.length; i++) {
let child = this._children[i];
let childBox = new Clutter.ActorBox();
this._user = this._gdm.get_user(GLib.get_user_name());
this._presence = new GnomeSession.Presence();
+ this._presenceItems = {};
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
this._iconBox.child = this._invisibleIcon;
else
this._iconBox.child = this._idleIcon;
+
+ for (let itemStatus in this._presenceItems)
+ this._presenceItems[itemStatus].setShowDot(itemStatus == status);
},
_createSubMenu: function() {
item = new PopupMenu.PopupImageMenuItem(_("Available"), 'user-available', true);
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.AVAILABLE));
this.menu.addMenuItem(item);
+ this._presenceItems[GnomeSession.PresenceStatus.AVAILABLE] = item;
item = new PopupMenu.PopupImageMenuItem(_("Busy"), 'user-busy', true);
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.BUSY));
this.menu.addMenuItem(item);
+ this._presenceItems[GnomeSession.PresenceStatus.BUSY] = item;
item = new PopupMenu.PopupImageMenuItem(_("Invisible"), 'user-invisible', true);
item.connect('activate', Lang.bind(this, this._setPresenceStatus, GnomeSession.PresenceStatus.INVISIBLE));
this.menu.addMenuItem(item);
+ this._presenceItems[GnomeSession.PresenceStatus.INVISIBLE] = item;
item = new PopupMenu.PopupSeparatorMenuItem();
this.menu.addMenuItem(item);